/**
 * Classe regroupant la liste des villes proposée à l'utilisateur : Projet Android 
 * @author Floriance BRIN, Julie ESCOFFIER, Yoann GOBERT, Ikram NACIRI, Yann NIVET
 * @version 1.0
 * @date mars 2011
 * **/

package fr.imac.ProjetAndroid.citySearch;

import java.io.InputStream;
import java.net.URL;
import java.util.Vector;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;

import fr.imac.ProjetAndroid.weatherGestion.WeatherApiUrls;

public class CityList {
	
	private Vector<City> listeVilles = new Vector<City>();
	
	/**
	 * Constructeur par défaut, génère la liste des villes sélectionnables par l'utilisateur
	 */
	public CityList(){
		//ajout des villes proposée
		listeVilles.add(new City("Paris",		"France",		"62827",	false));
		listeVilles.add(new City("Marseille",	"France",		"62707",	false));
		listeVilles.add(new City("Londres",		"Angleterre",	"60876",	false));
	}
	/**
	 * Constructeur qui récupère une liste de ville à partir d'une chaine de caractères
	 * @param city le nom de la ville
	 * @throws Exception exception renvoyée s'il y a une erreur de connexion
	 */
	public CityList(String city) throws Exception{
		String url = WeatherApiUrls.getUrlForCitySearch(city);
		URL myURL = new URL(url);
		
		SAXParserFactory spf = SAXParserFactory.newInstance();
		SAXParser sp = spf.newSAXParser();
		XMLReader xr = sp.getXMLReader();
		
		/** Create handler to handle XML Tags ( extends DefaultHandler ) */
		CityListParser myXMLHandler = new CityListParser();
		xr.setContentHandler(myXMLHandler);
		InputStream myStream =  myURL.openStream();
		xr.parse(new InputSource(myStream));
		//on ne prend la liste de villes
		for(int i=0; i<myXMLHandler.getNamesList().size(); i++){
			listeVilles.add(new City(myXMLHandler.getNamesList().get(i),
									myXMLHandler.getCountriesList().get(i),
									myXMLHandler.getCodesList().get(i),	
									myXMLHandler.getIsZipCodeList().get(i)));						
		}
	}
	
	/**
	 * Classe gérant les données d'une ville
	 */
	public class City{
		public String ville;
		public String pays;
		public String code;
		public boolean isZipCode;
		
		/**
		 * Constructeur
		 * @param ville : String
		 * @param pays : String
		 * @param code : String
		 * @param isZipCode : String true si c'est une ville américaine, false sinon
		 */
		public City(String ville, String pays, String code, boolean isZipCode){
			this.ville = ville;
			this.pays = pays;
			this.code = code;
			this.isZipCode = isZipCode;
		}
	}

	public void setListeVilles(Vector<City> listeVilles) {
		this.listeVilles = listeVilles;
	}

	public Vector<City> getListeVilles() {
		return listeVilles;
	}

}
